home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / PROBLEMS / BENCHMARK / BUBBLESORT / bubbletest / assembler / source < prev    next >
Text File  |  1992-09-02  |  5KB  |  219 lines

  1.  .ABSOLUTE
  2.  .PROC formula      
  3.  
  4.  ; bubbletest.assembler.needed is FREEWARE, you may not sell it
  5.  .INCLUDE <bubble_assembler$dir>.needed
  6.  
  7. ; FUNCTION INT bubblesort(INTPTR a,INT length)
  8.  .MACRO bubblesort formularesult,a,length
  9.  
  10. ; R9 = Adress(a)
  11.    LDR R9,[stackregister,#%2]
  12. ; R10 = length -1 
  13.    LDR R10,[stackregister,#%3]
  14.    SUB R10,R10,#1.
  15.   ; DO  
  16. \dolabel1  
  17.       MOV R0,#0
  18.      ; FOR (R3=0;R3<length-1;R3=R3+1)
  19.       MOV R5,R9
  20.       MOV R3,#0.
  21.       B \jumpinfor
  22. \for2label2
  23.          ;R4=[R5]; R6=a[R5,#4]
  24.          LDMFD R5,{R4,R6}
  25.          CMP R4,R6
  26.             STRGT R6,[R5]
  27.             ADD R5,R5,#4.
  28.             STRGT R4,[R5]
  29.             MOVGT R0,#1
  30.          ADD R3,R3,#1
  31. \jumpinfor
  32.       CMP R3,R10
  33.       BLT \for2label2       
  34.      ; ENDFOR 
  35. \jumpinwhile   
  36.    CMP R0,#1
  37.    BEQ \dolabel1
  38.   ;ENDDO (R0==1)
  39. ; ENDFUNCTION
  40.  .ENDM
  41.  
  42.  restoreregister
  43.  goto jump
  44.  
  45. ; INT a[1000]
  46.  DEFSTORE a,formula_one*1000.*4.,0
  47.     
  48. jump
  49.  
  50.   saveregister
  51.   ; call system with 1 arguments
  52.   STRINGconstload R1,'*wimpslot -min 7K -max 7K'
  53.   CHARPTRstackstore [stackregister,#16.],R1
  54.   STACKadd stackregister,stackregister,20.
  55.   system R0,-4.
  56.   STACKsub stackregister,stackregister,20.
  57.    ;R0
  58.  
  59. ; pseudo ramdom
  60.  ; LET R0=123456;
  61.   ; SAVEd R0
  62.    ;R0=123456.
  63.   INTconstload R1,123456.
  64.   INTregstore R0,R1
  65.  ; FOR (R1=0;R1<1000;R1=R1+1)
  66.   ; SAVEd R1
  67.    ;R1=0.
  68.   INTconstload R2,0.
  69.   INTregstore R1,R2
  70.   goto for2label4
  71. forlabel4
  72.   ; SAVEd R1
  73.    ;R1=R1+1.
  74.   INTconstload R2,1.
  75.   INTsum R2,R1,R2
  76.   INTregstore R1,R2
  77. for2label4
  78.   ; SAVEd R1
  79.   ; SAVEd R1
  80.    ;R1<1000.
  81.   INTconstload R2,1000.
  82.   INTless R2,R1,R2
  83.   ifnotgoto endforlabel4,R2
  84.      ; LET R0=(R0 + 234567) % 567 + 345
  85.       ; SAVEd R0
  86.        ;R0+234567.
  87.       INTconstload R2,234567.
  88.       INTsum R2,R0,R2
  89.        ;R0=R2%567.+345.
  90.       INTconstload R3,567.
  91.       INTmodulo R2,R2,R3
  92.       INTconstload R3,345.
  93.       INTsum R2,R2,R3
  94.       INTregstore R0,R2
  95.      ; LET a[R1]=R0;
  96.       ; SAVEd R1
  97.       ; SAVEd R0
  98.        ;R1
  99.       ; array a with 1 dimensions
  100.       INTregstore R3,R1
  101.       INTconstmult R3,4
  102.       INTPTRconstload R4,a
  103.       INTsum R3,R3,R4
  104.        ;R3=R0
  105.       INTarraystore R3,R0
  106.      ; LET writeint(a[R1])
  107.       ; SAVEd R1
  108.        ;R1
  109.       ; array a with 1 dimensions
  110.       INTregstore R3,R1
  111.       INTconstmult R3,4
  112.       INTPTRconstload R4,a
  113.       INTsum R3,R3,R4
  114.       INTarrayload R3,R3
  115.        ;R3
  116.       ; call writeint with 1 arguments
  117.       STMIA R12,{R0,R1,R3}
  118.       INTstackstore [stackregister,#28.],R3
  119.       STACKadd stackregister,stackregister,32.
  120.       writeint R2,-4.
  121.       STACKsub stackregister,stackregister,32.
  122.       LDMFD R12,{R0,R1,R3}
  123.        ;R2
  124.       restoreregister
  125.      cr
  126.  ; ENDFOR
  127.   saveregister
  128.   goto forlabel4
  129. endforlabel4
  130.  
  131.  ; LET system("show time1")
  132.    ;'show time1'
  133.   ; call system with 1 arguments
  134.   STMIA R12,{R0,R1}
  135.   STRINGconstload R3,'show time1'
  136.   CHARPTRstackstore [stackregister,#24.],R3
  137.   STACKadd stackregister,stackregister,28.
  138.   system R2,-4.
  139.   STACKsub stackregister,stackregister,28.
  140.   LDMFD R12,{R0,R1}
  141.    ;R2
  142.  ; LET bubblesort(a,1000)
  143.    ;a
  144.    ;1000.
  145.   ; call bubblesort with 2 arguments
  146.   STMIA R12,{R0,R1}
  147.   INTconstload R3,1000.
  148.   INTstackstore [stackregister,#24.],R3
  149.   INTPTRconstload R3,a
  150.   INTPTRstackstore [stackregister,#28.],R3
  151.   STACKadd stackregister,stackregister,32.
  152.   bubblesort R2,-4.,-8.
  153.   STACKsub stackregister,stackregister,32.
  154.   LDMFD R12,{R0,R1}
  155.    ;R2
  156.  ; LET system("show time1") 
  157.    ;'show time1'
  158.   ; call system with 1 arguments
  159.   STMIA R12,{R0,R1}
  160.   STRINGconstload R3,'show time1'
  161.   CHARPTRstackstore [stackregister,#24.],R3
  162.   STACKadd stackregister,stackregister,28.
  163.   system R2,-4.
  164.   STACKsub stackregister,stackregister,28.
  165.   LDMFD R12,{R0,R1}
  166.    ;R2
  167.  
  168.  ; FOR (R1=0;R1<1000;R1=R1+1)
  169.   ; SAVEd R1
  170.   ; SAVEd R1
  171.    ;R1=0.
  172.   INTconstload R2,0.
  173.   INTregstore R1,R2
  174.   goto for2label5
  175. forlabel5
  176.   ; SAVEd R1
  177.   ; SAVEd R1
  178.   ; SAVEd R1
  179.    ;R1=R1+1.
  180.   INTconstload R2,1.
  181.   INTsum R2,R1,R2
  182.   INTregstore R1,R2
  183. for2label5
  184.   ; SAVEd R1
  185.   ; SAVEd R1
  186.    ;R1<1000.
  187.   INTconstload R2,1000.
  188.   INTless R2,R1,R2
  189.   ifnotgoto endforlabel5,R2
  190.      ; LET writeint(a[R1])
  191.       ; SAVEd R1
  192.        ;R1
  193.       ; array a with 1 dimensions
  194.       INTregstore R3,R1
  195.       INTconstmult R3,4
  196.       INTPTRconstload R4,a
  197.       INTsum R3,R3,R4
  198.       INTarrayload R3,R3
  199.        ;R3
  200.       ; call writeint with 1 arguments
  201.       STMIA R12,{R0,R1,R3}
  202.       INTstackstore [stackregister,#28.],R3
  203.       STACKadd stackregister,stackregister,32.
  204.       writeint R2,-4.
  205.       STACKsub stackregister,stackregister,32.
  206.       LDMFD R12,{R0,R1,R3}
  207.        ;R2
  208.       restoreregister
  209.      cr
  210.  ; ENDFOR 
  211.   saveregister
  212.   goto forlabel5
  213. endforlabel5
  214.   restoreregister
  215.   SWI XOS_Exit
  216.  .END
  217.  
  218. ; end of inputfile: <formula$input>
  219.